From 1fb37b2fb44b9794443f12937eb941297ccf437a Mon Sep 17 00:00:00 2001 From: "djm@kirby.fc.hp.com" Date: Tue, 26 Apr 2005 21:08:52 +0000 Subject: [PATCH] bitkeeper revision 1.1327.1.6 (426eade4Z6TUJnbOAc8St0Xt6XDYMw) Various tweaks for paravirtualization and debugging --- xen/arch/ia64/hypercall.c | 9 ++++++++- xen/arch/ia64/vhpt.c | 13 +++++++++++++ xen/arch/ia64/xenasm.S | 1 - xen/include/asm-ia64/config.h | 2 ++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/xen/arch/ia64/hypercall.c b/xen/arch/ia64/hypercall.c index f568ee87b7..3eeff6fe2b 100644 --- a/xen/arch/ia64/hypercall.c +++ b/xen/arch/ia64/hypercall.c @@ -32,6 +32,14 @@ ia64_hypercall (struct pt_regs *regs) case FW_HYPERCALL_PAL_CALL: //printf("*** PAL hypercall: index=%d\n",regs->r28); //FIXME: This should call a C routine +#if 1 + // This is very conservative, but avoids a possible + // (and deadly) freeze in paravirtualized domains due + // to a yet-to-be-found bug where pending_interruption + // is zero when it shouldn't be. Since PAL is called + // in the idle loop, this should resolve it + ed->vcpu_info->arch.pending_interruption = 1; +#endif x = pal_emulator_static(regs->r28); regs->r8 = x.status; regs->r9 = x.v0; regs->r10 = x.v1; regs->r11 = x.v2; @@ -61,7 +69,6 @@ ia64_hypercall (struct pt_regs *regs) #endif break; case FW_HYPERCALL_EFI_GET_TIME: - fooefi(); tv = vcpu_get_gr(ed,32); tc = vcpu_get_gr(ed,33); //printf("efi_get_time(%p,%p) called...",tv,tc); diff --git a/xen/arch/ia64/vhpt.c b/xen/arch/ia64/vhpt.c index 976adce15c..b535f9fc56 100644 --- a/xen/arch/ia64/vhpt.c +++ b/xen/arch/ia64/vhpt.c @@ -21,7 +21,20 @@ void vhpt_flush(void) { struct vhpt_lf_entry *v = (void *)VHPT_ADDR; int i, cnt = 0; +#if 0 +static int firsttime = 2; +if (firsttime) firsttime--; +else { +printf("vhpt_flush: *********************************************\n"); +printf("vhpt_flush: *********************************************\n"); +printf("vhpt_flush: *********************************************\n"); +printf("vhpt_flush: flushing vhpt (seems to crash at rid wrap?)...\n"); +printf("vhpt_flush: *********************************************\n"); +printf("vhpt_flush: *********************************************\n"); +printf("vhpt_flush: *********************************************\n"); +} +#endif for (i = 0; i < VHPT_NUM_ENTRIES; i++, v++) { v->itir = 0; v->CChain = 0; diff --git a/xen/arch/ia64/xenasm.S b/xen/arch/ia64/xenasm.S index 0aee4a1fdd..f04dfea8fa 100644 --- a/xen/arch/ia64/xenasm.S +++ b/xen/arch/ia64/xenasm.S @@ -190,7 +190,6 @@ GLOBAL_ENTRY(ia64_new_rr7) movl r22=SHAREDINFO_ADDR ;; - movl r25=PAGE_SHARED movl r25=__pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RW) ;; mov r21=loc5 // saved sharedinfo physical address diff --git a/xen/include/asm-ia64/config.h b/xen/include/asm-ia64/config.h index 2fb1c7c7ca..2b3d017cf9 100644 --- a/xen/include/asm-ia64/config.h +++ b/xen/include/asm-ia64/config.h @@ -251,6 +251,8 @@ extern unsigned int watchdog_on; #undef CONFIG_X86 +#define CONFIG_MCKINLEY + //#define CONFIG_SMP 1 //#define CONFIG_NR_CPUS 2 //leave SMP for a later time -- 2.30.2